<!DOCTYPE html>
<html lang="en" class="js csstransforms3d">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <meta name="generator" content="Hugo 0.85.0" />
  <meta name="description" content="">


  <link rel="shortcut icon" href="../images/favicon.png" type="image/x-icon" />
  <link rel="icon" href="../images/favicon.png" type="image/x-icon" />

  <title>Assembler :: Mesen Documentation</title>


  <link href="../css/nucleus.css?1626403088" rel="stylesheet">
  <link href="../css/font-awesome.min.css?1626403088" rel="stylesheet">
  <link href="../css/hybrid.css?1626403088" rel="stylesheet">
  <link href="../css/featherlight.min.css?1626403088" rel="stylesheet">
  <link href="../css/perfect-scrollbar.min.css?1626403088" rel="stylesheet">
  <link href="../css/horsey.css?1626403088" rel="stylesheet">
  <link href="../css/theme.css?1626403088" rel="stylesheet">
  <link href="../css/hugo-theme.css?1626403088" rel="stylesheet">
  <link href="../css/custom.css?1626403088" rel="stylesheet">

  <link href="../css/theme-green.css?1626403088" rel="stylesheet">


  <script src="../js/jquery-2.x.min.js?1626403088"></script>

  <style type="text/css">
    :root #header+#content>#left>#rlblock_left {
      display: none !important;
    }
  </style>

</head>

<body class="" data-url="../debugging/assembler.html">
  <nav id="sidebar" class="">



    <div id="header-wrapper">
      <div id="header">
        <a id="logo" href="../index.html">
          <img src="../images/MesenIcon.png" />
        </a>

      </div>

      <div class="searchbox">
        <label for="search-by"><i class="fa fa-search"></i></label>
        <input data-search-input id="search-by" type="text" placeholder="Search...">
        <span data-search-clear=""><i class="fa fa-close"></i></span>
      </div>

      <script type="text/javascript" src="../js/lunr.min.js?1626403088"></script>
      <script type="text/javascript" src="../js/horsey.js?1626403088"></script>
      <script type="text/javascript">

        var baseurl = "";


      </script>
      <script type="text/javascript" src="../js/searchjson.js?1626403088"></script>
      <script type="text/javascript" src="../js/search.js?1626403088"></script>


    </div>

    <div class="highlightable">
      <ul class="topics">








        <li data-nav-id="/gettingstarted.html" title="Getting Started" class="dd-item 
        
        
        
        ">
          <a href="../gettingstarted.html">
            Getting Started

          </a>


        </li>










        <li data-nav-id="/configuration.html" title="Configuration" class="dd-item 
        
        
        
        ">
          <a href="../configuration.html">
            Configuration

          </a>


          <ul>













            <li data-nav-id="/configuration/audio.html" title="Audio Options" class="dd-item ">
              <a href="../configuration/audio.html">
                Audio Options

              </a>
            </li>













            <li data-nav-id="/configuration/input.html" title="Input Options" class="dd-item ">
              <a href="../configuration/input.html">
                Input Options

              </a>
            </li>













            <li data-nav-id="/configuration/video.html" title="Video Options" class="dd-item ">
              <a href="../configuration/video.html">
                Video Options

              </a>
            </li>













            <li data-nav-id="/configuration/emulation.html" title="Emulation Options" class="dd-item ">
              <a href="../configuration/emulation.html">
                Emulation Options

              </a>
            </li>













            <li data-nav-id="/configuration/preferences.html" title="Preferences" class="dd-item ">
              <a href="../configuration/preferences.html">
                Preferences

              </a>
            </li>







          </ul>

        </li>










        <li data-nav-id="/tools.html" title="Tools" class="dd-item 
        
        
        
        ">
          <a href="../tools.html">
            Tools

          </a>


        </li>










        <li data-nav-id="/debugging.html" title="Debugging Tools" class="dd-item 
        parent
        
        
        ">
          <a href="../debugging.html">
            Debugging Tools

          </a>


          <ul>













            <li data-nav-id="/debugging/debugger.html" title="Debugger" class="dd-item ">
              <a href="../debugging/debugger.html">
                Debugger

              </a>
            </li>













            <li data-nav-id="/debugging/apuviewer.html" title="APU Viewer" class="dd-item ">
              <a href="../debugging/apuviewer.html">
                APU Viewer

              </a>
            </li>













            <li data-nav-id="/debugging/assembler.html" title="Assembler" class="dd-item active">
              <a href="../debugging/assembler.html">
                Assembler

              </a>
            </li>













            <li data-nav-id="/debugging/eventviewer.html" title="Event Viewer" class="dd-item ">
              <a href="../debugging/eventviewer.html">
                Event Viewer

              </a>
            </li>













            <li data-nav-id="/debugging/memorytools.html" title="Memory Tools" class="dd-item ">
              <a href="../debugging/memorytools.html">
                Memory Tools

              </a>
            </li>













            <li data-nav-id="/debugging/performanceprofiler.html" title="Performance Profiler" class="dd-item ">
              <a href="../debugging/performanceprofiler.html">
                Performance Profiler

              </a>
            </li>













            <li data-nav-id="/debugging/ppuviewer.html" title="PPU Viewer" class="dd-item ">
              <a href="../debugging/ppuviewer.html">
                PPU Viewer

              </a>
            </li>













            <li data-nav-id="/debugging/scriptwindow.html" title="Script Window" class="dd-item ">
              <a href="../debugging/scriptwindow.html">
                Script Window

              </a>
            </li>













            <li data-nav-id="/debugging/texthooker.html" title="Text Hooker" class="dd-item ">
              <a href="../debugging/texthooker.html">
                Text Hooker

              </a>
            </li>













            <li data-nav-id="/debugging/tracelogger.html" title="Trace Logger" class="dd-item ">
              <a href="../debugging/tracelogger.html">
                Trace Logger

              </a>
            </li>













            <li data-nav-id="/debugging/debuggerintegration.html" title="Integration with compilers" class="dd-item ">
              <a href="../debugging/debuggerintegration.html">
                Integration with compilers

              </a>
            </li>







          </ul>

        </li>










        <li data-nav-id="/hdpacks.html" title="HD Packs" class="dd-item 
        
        
        
        ">
          <a href="../hdpacks.html">
            HD Packs

          </a>


        </li>










        <li data-nav-id="/apireference.html" title="Lua API reference" class="dd-item 
        
        
        
        ">
          <a href="../apireference.html">
            Lua API reference

          </a>


          <ul>













            <li data-nav-id="/apireference/changelog.html" title="Changelog" class="dd-item ">
              <a href="../apireference/changelog.html">
                Changelog

              </a>
            </li>













            <li data-nav-id="/apireference/callbacks.html" title="Callbacks" class="dd-item ">
              <a href="../apireference/callbacks.html">
                Callbacks

              </a>
            </li>













            <li data-nav-id="/apireference/drawing.html" title="Drawing" class="dd-item ">
              <a href="../apireference/drawing.html">
                Drawing

              </a>
            </li>













            <li data-nav-id="/apireference/emulation.html" title="Emulation" class="dd-item ">
              <a href="../apireference/emulation.html">
                Emulation

              </a>
            </li>













            <li data-nav-id="/apireference/input.html" title="Input" class="dd-item ">
              <a href="../apireference/input.html">
                Input

              </a>
            </li>













            <li data-nav-id="/apireference/logging.html" title="Logging" class="dd-item ">
              <a href="../apireference/logging.html">
                Logging

              </a>
            </li>













            <li data-nav-id="/apireference/memoryaccess.html" title="Memory Access" class="dd-item ">
              <a href="../apireference/memoryaccess.html">
                Memory Access

              </a>
            </li>













            <li data-nav-id="/apireference/misc.html" title="Miscellaneous" class="dd-item ">
              <a href="../apireference/misc.html">
                Miscellaneous

              </a>
            </li>













            <li data-nav-id="/apireference/enums.html" title="Enums" class="dd-item ">
              <a href="../apireference/enums.html">
                Enums

              </a>
            </li>







          </ul>

        </li>





      </ul>



      <section id="shortcuts">
        <h3>More</h3>
        <ul>

          <li class="" role="">
            <a class="padding" href="https://www.mesen.ca"><img style='vertical-align: middle'
                src='../images/favicon.png' /> <span style='display: inline;vertical-align: middle'>Website</span></a>
          </li>

          <li class="" role="">
            <a class="padding" href="https://github.com/SourMesen/Mesen"><i class='fa fa-github'></i> GitHub</a>
          </li>

        </ul>
      </section>



      <div id="menuspacer"></div>
      <section id="footer">
        <div class="menuFooter">
          <div class="donateButton"><a href="https://www.mesen.ca/Donate.php"><img src="../images/patreon.png"
                alt="Become a Patron!" width="66%" height="66%"></a></div>
          <div class="donateButton"><a class="bmc-button" target="_blank" href="https://www.mesen.ca/BuyCoffee.php"><img
                src="../images/BMC-btn-logo.svg" alt="Donate"><span style="margin-left:5px">Donate</span></a></div>
          Version: <b>0.9.9</b><br />
          Last Updated: <b>2021-07-16</b>
        </div>

      </section>
    </div>
  </nav>





  <section id="body">
    <div id="overlay"></div>
    <div class="padding highlightable sticky-parent">

      <div class="sticky-spacer">
        <div id="top-bar">


          <div id="breadcrumbs" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
            <span id="sidebar-toggle-span">
              <a href="#" id="sidebar-toggle" data-sidebar-toggle="">
                <i class="fa fa-bars"></i>
              </a>
            </span>

            <span id="toc-menu"><i class="fa fa-list-alt"></i></span>

            <span class="links">











              <a href='../'>Home</a> > <a href='../debugging.html'>Debugging Tools</a> > Assembler






            </span>
          </div>

          <div class="progress">
            <div class="wrapper">
              <nav id="TableOfContents">
                <ul>
                  <li>
                    <ul>
                      <li><a href="#usage">Usage</a></li>
                      <li><a href="#supported-features">Supported features</a></li>
                      <li><a href="#limitations">Limitations</a></li>
                      <li><a href="#display-options">Display Options</a></li>
                    </ul>
                  </li>
                </ul>
              </nav>
            </div>
          </div>


        </div>
      </div>



      <div id="body-inner">

        <h1>Assembler</h1>






        <div class="toc">
          <div>
            <nav id="TableOfContents">
              <ul>
                <li>
                  <ul>
                    <li><a href="#usage">Usage</a></li>
                    <li><a href="#supported-features">Supported features</a></li>
                    <li><a href="#limitations">Limitations</a></li>
                    <li><a href="#display-options">Display Options</a></li>
                  </ul>
                </li>
              </ul>
            </nav>
          </div>
        </div>

        <div class="imgBox">
          <div><img src="../images/Assembler.png">
            <span>Assembler</span>
          </div>
        </div>

        <!-- raw HTML omitted -->
        <p>汇编器可以用来编写新的代码 编辑已有的代码和运行任何代码 The assembler allows writing new code, editing existing code and running
          arbitrary code.</p>
        <h3 id="usage">使用 Usage</h3>
        <p>代码是实时编译的 Code is assembled on-the-fly, with the resulting byte code being shown on the right.</p>
        <p>Any compilation error will be shown in the list at the bottom &ndash; <strong>
            <!-- raw HTML omitted -->double-click
            <!-- raw HTML omitted -->
          </strong> an error in the list to navigate to the line that caused it.</p>
        <p>编写完成后 点击`Execute`执行 或者 `Apply` Once you are done editing the code, you can either <code>Execute</code> it, or
          <code>Apply</code> it.
          Executing the code will make it run in the $3000-$3FFF memory range (temporarely overriding the PPU&rsquo;s
          normal behavior) and break the execution once the code is done executing. On the other hand, clicking
          <code>Apply</code> will write the code to the specified memory address - this can be used to create new code
          in RAM, for example, or alter existing code in PRG ROM.
        </p>
        <!-- raw HTML omitted -->
        <div class="notices tip">
          <p>Any changes done to PRG ROM will remain in effect until a power cycle. If you want to save your
            modifications to a .nes file, or as an IPS patch, you can use the <strong><kbd>File→Save</kbd></strong> or
            <strong><kbd>File→Save edits as IPS</kbd></strong> commands in the <a href="../debugging/debugger.html"
              class="highlight">debugger window</a>.</p>
        </div>
        <p><strong>备注 Note</strong>:当编辑已有的代码时候 会跟踪已有代码,如果编写的新代码超过了现有空间就会提出警告 When <a
            href="../debugging/debugger.html#how-to-edit-code">editing an existing block
            of code</a>, the assembler keeps track of how many bytes of code the original code contained, as well as
          whether or not an RTS instruction was present. If the new code is lacking an RTS instruction, or is too large
          to fit into the original block of code, a warning will be shown before applying the changes.</p>
        <h3 id="supported-features">支持的功能 Supported features</h3>
        <ul>
          <li>All official opcodes and addressing modes are fully supported.</li>
          <li>All unofficial opcodes with well-defined behavior are supported (see <a
              href="#limitations">limitations</a> below)</li>
          <li>Hexadecimal ($ prefix) and decimal values are supported.</li>
          <li>Labels can be used and defined in the code. When using labels, the assembler will favor zero-page
            addressing when possible - only using other types of addressing when necessary.</li>
          <li>The <code>.byte</code> directive can be used to add arbitrary data to the output.</li>
        </ul>
        <h3 id="limitations">Limitations</h3>
        <ul>
          <li>
            <p><strong>Unofficial opcodes</strong>: The assembler supports all unofficial opcodes that Mesen can
              emulate. However, opcodes that have undefined behavior (and thus are not emulated by Mesen) are not
              supported. Additionally, name conflicts make it so it is impossible to use any NOP opcode other than the
              standard NOP opcode.</p>
          </li>
          <li>
            <p><strong>Defining labels</strong>: As mentioned above, it is possible to define labels to use in the
              assembler. However, these labels are (currently) not permanent - they are discarded once the assembler is
              closed.</p>
          </li>
        </ul>
        <h3 id="display-options">Display Options</h3>
        <p>Syntax highlighting can be configured (or disabled) via the <code>View</code> menu.<br>
          It is also possible to change the font size.</p>


        <footer class=" footline">

        </footer>



      </div>
    </div>

    <div id="navigation">

















































































































































































































































































































































































































































































































































      <a class="nav nav-prev" href="../debugging/apuviewer.html" title="APU Viewer"> <i
          class="fa fa-chevron-left"></i></a>


      <a class="nav nav-next" href="../debugging/eventviewer.html" title="Event Viewer" style="margin-right: 0px;"><i
          class="fa fa-chevron-right"></i></a>

    </div>

  </section>

  <div
    style="left: -1000px; overflow: scroll; position: absolute; top: -1000px; border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;">
    <div style="border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;"></div>
  </div>
  <script src="../js/clipboard.min.js?1626403088"></script>
  <script src="../js/perfect-scrollbar.min.js?1626403088"></script>
  <script src="../js/perfect-scrollbar.jquery.min.js?1626403088"></script>
  <script src="../js/jquery.sticky-kit.min.js?1626403088"></script>
  <script src="../js/featherlight.min.js?1626403088"></script>
  <script src="../js/html5shiv-printshiv.min.js?1626403088"></script>
  <script src="../js/highlight.pack.js?1626403088"></script>
  <script>hljs.initHighlightingOnLoad();</script>
  <script src="../js/modernizr.custom.71422.js?1626403088"></script>
  <script src="../js/learn.js?1626403088"></script>
  <script src="../js/hugo-learn.js?1626403088"></script>

  <link href="../mermaid/mermaid.css?1626403088" type="text/css" rel="stylesheet" />
  <script src="../mermaid/mermaid.js?1626403088"></script>
  <script>
    mermaid.initialize({ startOnLoad: true });
  </script>


</body>

</html>